home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cubase Magazine 32
/
Issue #32.iso
/
3-TUTORIAL
/
TRIANTI
/
convoluzione
/
wavereader.h
< prev
next >
Wrap
C/C++ Source or Header
|
2001-02-18
|
2KB
|
77 lines
#ifndef __inc_WaveReader__
#define __inc_WaveReader__
/* Costanti che identificano i vari chunk */
#define RIFF_CHUNK ('R' | 'I' << 8 | 'F' << 16 | 'F' << 24)
#define DATA_CHUNK ('d' | 'a' << 8 | 't' << 16 | 'a' << 24)
#define FMT__CHUNK ('f' | 'm' << 8 | 't' << 16 | ' ' << 24)
#define TYPE_WAVE ('W' | 'A' << 8 | 'V' << 16 | 'E' << 24)
/* Formati wave non compressi */
#define WAVE_FORMAT_PCM 1
#define WAVE_FORMAT_FLOAT 3
struct WaveFormat
{
unsigned short wFormatTag; /* Tipo di file (1 = PCM, 3 = floating point PCM) */
unsigned short nChannels; /* numero di canali */
unsigned long nSamplesPerSec; /* sample rate */
unsigned long nAvgBytesPerSec; /* flusso di dati in bytes al secondo */
unsigned short nBlockAlign; /* allineamento tra campioni */
unsigned short wBitsPerSample; /* bit per campione (es. 8, 16, 20, 24...) */
} typedef WaveFormat;
struct RiffChunk
{
unsigned long id; /* identificatore del chunk. Il primo deve essere RIFF_CHUNK */
unsigned long cbSize; /* dimensione in byte dei dati appartenenti al chunk */
} typedef RiffChunk;
struct ChunkInfo
{
RiffChunk chunk; /* il chunk vero e proprio */
unsigned long offset; /* l'esatta posizione nel file dell'inizio dei dati
del chunk */
} typedef ChunkInfo;
struct WaveFileDirect
{
FILE* file;
int sampleRate;
int nChannels;
int bitPerSample;
int cbBlockAlign;
int nSamples;
int pcmDataOffset;
int nSamplePosition;
} typedef WaveFileDirect;
struct WaveFileWriter
{
FILE* file;
int sampleRate;
int nChannels;
int nSamples;
} typedef WaveFileWriter;
/* Scrittura file wave */
WaveFileWriter* WFW_CreaWave (char *nome_file, int sr, int canali);
int WFW_Scrivi (WaveFileWriter *wfw, float* buffer, int samples);
int WFW_Chiudi (WaveFileWriter* wfw);
/* Lettura file wave */
WaveFileDirect* WFD_ApriWave (char *nome_file);
int WFD_Posiziona (WaveFileDirect *wfd, int numeroCampione);
int WFD_Leggi (WaveFileDirect *wfd, float *buffer, int numeroCampioni);
int WFD_LeggiCampione (WaveFileDirect *wfd, float* buffer);
int WFD_Chiudi (WaveFileDirect *wfd);
#
#endif